package com.jie.demo.mock;

import org.junit.Test;
import org.mockito.ArgumentCaptor;

import java.util.List;

import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

/**
 * 获取 mock对象的参数
 * 监控mock对象的方法参数是什么
 */
public class CaptorMock {
    @Test
    public void argumentCaptorTest() {
        List mock = mock(List.class);
        List mock2 = mock(List.class);
        mock.add("John");
        mock2.add("Brian");
        mock2.add("Jim");

        // 指定获取的参数类型为String
        ArgumentCaptor argument = ArgumentCaptor.forClass(String.class);
        // 取得第一次调用方法传入的参数
        verify(mock).add(argument.capture());
        assertEquals("John", argument.getValue());
        // 取得第二次调用方法传入的参数
        verify(mock2, times(2)).add(argument.capture());

        assertEquals("Jim", argument.getValue());
        // argument.getAllValues() 所有参数
        assertArrayEquals(new Object[]{"Brian","Jim"},argument.getAllValues().toArray());
    }
}
